package com.str.demo01;

public class Test {
    public static void main(String[] args) {
        System.out.println("字符串");
        /**
         *  String 类
         *  特点：
         *      1、字符串是常量，创建之后不可改变(不可变特性)
         *      2、字符串的值存储在字符串池中，可以共享
         *      3、String s = "hello"; 产生一个对象，字符串池中存储
         *      4、String s = new String("hello world"); 产生两个对象，堆、池各一个
         */

         // 不可变特性
        String str = "hello";
        System.out.println(str); //  hello
        str = "world";
        System.out.println(str); // world
        /**
         * 思考一下,是 str 改变了吗？
         * 其实不是字符串改变了，而是引用变量 str的指向发生了改变
         * 执行 String str = "hello";时，JVM虚拟机先创建字符串"hello"，然后，把字符串变量str指向它：
         * 紧接着，执行 str = "world";时，JVM虚拟机先创建字符串"world"，然后，把字符串变量str指向它：
         * 原来的字符串"hello"还在，只是我们无法通过变量s访问它而已。因此，字符串的不可变是指字符串内容不可变。
         */
        // 理解下面代码
        String s = "china";
        String w = s;
        s = "good";
        System.out.println(w); // 输出内容?
        // 答案是 china

        // 复习一下可变参数
        Test test = new Test();
        int[] number = {1,12,34};
        test.go(number);
    }

    // 可变参数 ... 表示
    public void go(int... number) {
        for (int i : number) {
            System.out.println(i);
        }
    }
}
